﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Godot.core;

namespace Godot.modules.gdscript
{
    class GDScriptLanguage : ScriptLanguage
    {
    #region Fields & attributes
        
        private static GDScriptLanguage _sInstance = null;

        private Dictionary<StringName,int> _globals;
        private List<Variant> _global_array;

        public struct Props
        {
		    public StringName _init;
		    public StringName _notification;
		    public StringName _set;
		    public StringName _get;
		    public StringName _get_property_list;
		    public StringName _script_source;

	    };
        public Props strings;

    #endregion

        public static GDScriptLanguage singleton
        {
            get
            {
                if (_sInstance == null)
                    _sInstance = new GDScriptLanguage();
                return _sInstance;
            }
        }

        public override string name
        {
            get { throw new NotImplementedException(); }
        }

        public override void init()
        {
            throw new NotImplementedException();
        }

        public override string type
        {
            get { throw new NotImplementedException(); }
        }

        public override string extension
        {
            get { throw new NotImplementedException(); }
        }

        public override Error execute_file(string p_path)
        {
            throw new NotImplementedException();
        }

        public override void finish()
        {
            throw new NotImplementedException();
        }

        public override ReadOnlyCollection<string> reserved_words
        {
            get { throw new NotImplementedException(); }
        }

        public override ReadOnlyCollection<string> comment_delimiters
        {
            get { throw new NotImplementedException(); }
        }

        public override ReadOnlyCollection<string> string_delimiters
        {
            get { throw new NotImplementedException(); }
        }

        public override string get_template(string p_class_name, string p_base_class_name)
        {
            throw new NotImplementedException();
        }

        public override bool validate(string p_script, int r_line_error, int r_col_error, string r_test_error, string p_path = "", List<string> r_functions = null)
        {
            throw new NotImplementedException();
        }

        public override Script create_script()
        {
            throw new NotImplementedException();
        }

        public override bool has_named_classes()
        {
            throw new NotImplementedException();
        }

        public override int find_function(string p_function, string p_code)
        {
            throw new NotImplementedException();
        }

        public override string make_function(string p_class, string p_name, string[] p_args)
        {
            throw new NotImplementedException();
        }

        public override ReadOnlyCollection<string> recognized_extensions
        {
            get { throw new NotImplementedException(); }
        }

        public override ReadOnlyCollection<MethodInfo> public_functions
        {
            get { throw new NotImplementedException(); }
        }

        public override ReadOnlyCollection<KeyValuePair<string, Variant>> public_ants
        {
            get { throw new NotImplementedException(); }
        }

        public List<Variant> get_global_array() { return _global_array; }

        public Dictionary<StringName,int> get_global_map() { return _globals; }
    }
}
